import axios from 'axios';

const baseUrl = import.meta.env.VITE_APP_API_URL;
const tenant = import.meta.env.VITE_USER_TENANT;
// 创建axios实例
const service = axios.create({
    // 设置统一的请求前缀
    baseURL: baseUrl,
    // 设置统一的超时时长
    timeout: 5000,
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 设置请求头
        if (!config.headers['Content-Type']) {
            // 默认为JSON格式的数据
            config.headers['Content-Type'] = 'application/json; charset=utf-8';
        }

        // 如果是文件上传请求，不设置Content-Type，浏览器会自动设置
        if (config.isUploadFile) {
            delete config.headers['Content-Type'];
        }

        // 在这里可以添加其他请求前的操作，比如设置token
        // config.headers['Authorization'] = 'Bearer your-token';
        // 设置租户
        config.headers['X-Tenant-ID'] = tenant;
        return config;
    },
    error => {
        // 请求错误处理
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 处理文件下载
        const contentType = response.headers['content-type'];
        if (contentType && contentType.includes('application/octet-stream')) {
            const url = window.URL.createObjectURL(new Blob([response.data]));
            const link = document.createElement('a');
            link.href = url;
            // 文件名可以由后端返回或根据实际情况设定
            link.setAttribute('download', 'file');
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
            window.URL.revokeObjectURL(url);
            return { message: 'File downloaded.' };
        }

        // 在这里可以添加一些响应后的操作，比如处理错误状态码
        const res = response.data;
        if (res.success == false) {
            // 业务错误处理，比如登录过期、无权限等
            return Promise.reject(new Error(res.message || 'Error'));
        } else {
            return res;
        }
    },
    error => {
        // 响应错误处理
        return Promise.reject(error);
    }
);

export default service;